#include "exynos_4412.h"

void do_irq(void){

	unsigned int IrqNum = 0;
	// 从中断控制器中获取当前中断ID号
	IrqNum = CPU0.ICCIAR & 0x3FF;
	switch(IrqNum){
		case 0:
			// 0号中断处理程序
			break;
		case 1:
			// 1号中断处理程序
			break;
		/*......*/
		case 57:
			printf("KEY2 Pressed\n");

			/*清除GPIO控制器的中断挂起位*/
			EXT_INT41_PEND = (1 << 1);

			/*将　当前的中断号　写回中断寄存器，告诉中断寄存器CPU已经处理完
			 *当前的中断号的异常处理程序，可以发送其他中断号 */
			CPU0.ICCEOIR = CPU0.ICCEOIR & (~(0x3FF)) | (57);
			break;
		//.....
		case 159:
			break;
		default:
			break;
	}

}

void Delay(unsigned int Time){
	while(Time--);
}

void INT_Init(){
	/*将GPX1_1 设置为中断功能*/
	GPX1.CON = GPX1.CON | (0xF << 4);
	/*设置GPX1_1中断触发模式*/ 
	EXT_INT41_CON = EXT_INT41_CON & (~(0x7 << 4)) | (0x2 << 4);
	/*使能GPX1_1的中断功能*/
	EXT_INT41_MASK = EXT_INT41_MASK & (~(1 << 1));
	//EXT_INT41_MASK = (~(EXT_INT41_MASK & (~(0xFF)) | (0x2)));
	/*ICDDCR 控制 GIC总开关*/
	ICDDCR = ICDDCR | (1 << 1);
	/*ICDISER 控制 每一个中断号 的 使能位*/
	ICDISER.ICDISER1 = ICDISER.ICDISER1 & (~(0xF << 24)) | (0x01 << 25);
	/*ICDIPTR 控制 每一个中断号 的 控制对应的 CPU号*/
	ICDIPTR.ICDIPTR14 = ICDIPTR.ICDIPTR14 & (~(0xFF << 8)) | (0x01 << 8);
	/*ICCICR_CPUn 打开 CPU 与 中断控制器 的 开关*/
	CPU0.ICCICR = CPU0.ICCICR | (1 << 1);

	

}
int main()
{
	INT_Init();
	while(1){
		GPX2.DAT = GPX2.DAT | (1 << 7);
		Delay(1000000);
		GPX2.DAT = GPX2.DAT & (~(1 << 7));
		Delay(1000000);

		
	}

	return 0;
}
